/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package grafico.calculos;

import calculos.MetodoCalculo;
import calculos.MetodoRCQ;
import controladora.ControlaPaciente;
import persistencia.Pacientes;
import clinicanutricao.Paciente;
import clinicanutricao.ResultadoAvaliacao;

/**
 *
 * @author Kdc
 */
public class CalcularRCQ implements CalcularClassificacao {

    private int baixoF = 0;
    private int moderadoF = 0;
    private int altoF = 0;
    private int muitoAltoF = 0;

    private int baixoM = 0;
    private int moderadoM = 0;
    private int altoM = 0;
    private int muitoAltoM = 0;

    private int qntMulheres = 0;
    private int qntHomens = 0;

    private MetodoCalculo metodoCalculo;
    private Pacientes pacientes = new Pacientes();
    private ControlaPaciente controlaPaciente = new ControlaPaciente(pacientes);
    ResultadoAvaliacao resultadoAvaliacao;

    public CalcularRCQ() {

        calcularClassificacaoFeminino();
        calcularClassificacaoMaculino();
    }

    @Override
    public void calcularClassificacaoFeminino() {

        controlaPaciente.carregarPacientes();

        for (int i = 0; i < pacientes.getPacientes().size(); i++) {
            Paciente paciente = pacientes.getPacientes().get(i);

            metodoCalculo = new MetodoRCQ();
            metodoCalculo.calcula(paciente);

            if (paciente.getSexo() == 'F') {
                qntMulheres = qntMulheres + 1;

                for (int j = 0; j < paciente.getResultados().size(); j++) {
                    if (paciente.getResultados().get(j).getMetodo().equalsIgnoreCase("RCQ")) {
                        resultadoAvaliacao = paciente.getResultados().get(j);
                    }
                }

                if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Baixo")) {
                    baixoF++;

                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Moderado")) {
                    moderadoF++;

                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Alto")) {
                    altoF++;

                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Muito Alto")) {
                    muitoAltoF++;
                }

            }
        }
        CalcularPorcentagemFeminino();

    }

    private void CalcularPorcentagemFeminino() {
        baixoF = (baixoF * 100) / qntMulheres;
        moderadoF = (moderadoF * 100) / qntMulheres;
        altoF = (altoF * 100) / qntMulheres;
        muitoAltoF = (muitoAltoF * 100) / qntMulheres;
    }

    @Override
    public void calcularClassificacaoMaculino() {

        controlaPaciente.carregarPacientes();

        for (int i = 0; i < pacientes.getPacientes().size(); i++) {
            Paciente paciente = pacientes.getPacientes().get(i);

            metodoCalculo = new MetodoRCQ();
            metodoCalculo.calcula(paciente);

            if (paciente.getSexo() == 'M') {
                qntHomens = qntHomens + 1;

                for (int j = 0; j < paciente.getResultados().size(); j++) {
                    if (paciente.getResultados().get(j).getMetodo().equalsIgnoreCase("RCQ")) {
                        resultadoAvaliacao = paciente.getResultados().get(j);
                    }
                }

                if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Baixo")) {
                    baixoM++;

                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Moderado")) {
                    moderadoM++;

                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Alto")) {
                    altoM++;

                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Muito Alto")) {
                    muitoAltoM++;
                }

            }
        }
        CalcularPorcentagemMasculino();

    }

    private void CalcularPorcentagemMasculino() {
        baixoM = (baixoM * 100) / qntHomens;
        moderadoM = (moderadoM * 100) / qntHomens;
        altoM = (altoM * 100) / qntHomens;
        muitoAltoM = (muitoAltoM * 100) / qntHomens;
    }

    public int getBaixoF() {
        return baixoF;
    }

    public void setBaixoF(int baixoF) {
        this.baixoF = baixoF;
    }

    public int getModeradoF() {
        return moderadoF;
    }

    public void setModeradoF(int moderadoF) {
        this.moderadoF = moderadoF;
    }

    public int getAltoF() {
        return altoF;
    }

    public void setAltoF(int altoF) {
        this.altoF = altoF;
    }

    public int getMuitoAltoF() {
        return muitoAltoF;
    }

    public void setMuitoAltoF(int muitoAltoF) {
        this.muitoAltoF = muitoAltoF;
    }

    public int getBaixoM() {
        return baixoM;
    }

    public void setBaixoM(int baixoM) {
        this.baixoM = baixoM;
    }

    public int getModeradoM() {
        return moderadoM;
    }

    public void setModeradoM(int moderadoM) {
        this.moderadoM = moderadoM;
    }

    public int getAltoM() {
        return altoM;
    }

    public void setAltoM(int altoM) {
        this.altoM = altoM;
    }

    public int getMuitoAltoM() {
        return muitoAltoM;
    }

    public void setMuitoAltoM(int muitoAltoM) {
        this.muitoAltoM = muitoAltoM;
    }

    public int getQntMulheres() {
        return qntMulheres;
    }

    public void setQntMulheres(int qntMulheres) {
        this.qntMulheres = qntMulheres;
    }

    public int getQntHomens() {
        return qntHomens;
    }

    public void setQntHomens(int qntHomens) {
        this.qntHomens = qntHomens;
    }

    public MetodoCalculo getMetodoCalculo() {
        return metodoCalculo;
    }

    public void setMetodoCalculo(MetodoCalculo metodoCalculo) {
        this.metodoCalculo = metodoCalculo;
    }

    public Pacientes getPacientes() {
        return pacientes;
    }

    public void setPacientes(Pacientes pacientes) {
        this.pacientes = pacientes;
    }

    public ControlaPaciente getControlaPaciente() {
        return controlaPaciente;
    }

    public void setControlaPaciente(ControlaPaciente controlaPaciente) {
        this.controlaPaciente = controlaPaciente;
    }

}
